//登录注册模块的小仓库
import { reqGetCode, reqUserRegister, reqUserLogin, reqUserInfo, reqlogout } from "@/api";
//准备state——用于存储数据
const state = {
    code: "",  //验证码
    token: localStorage.getItem('TOKEN'), //令牌,默认从localStorage拿，如果没有则为空，等待mutations改变
    userInfo: {}, //用户信息
}

//准备mutations——用于操作数据（state）
const mutations = {
    GETCODE(state, code) {
        state.code = code;
    },
    USERLOGIN(state, token) {
        state.token = token;
    },
    GETUSERINFO(state, userInfo) {
        state.userInfo = userInfo;
    },
    //退出登录清除本地数据
    CLEAR(state) {
        //清除仓库数据
        state.token = '',
            state.userInfo = '',
            //清除本地存储数据
            localStorage.removeItem('TOKEN')
    }
}
//准备actions——用于响应组件中的动作
const actions = {
    //获取验证码
    async getCode({ commit }, phone) {
        let result = await reqGetCode(phone);
        if (result.code == 200) {
            commit('GETCODE', result.data.code);
            return '成功';
        } else {
            return Promise.reject(new Error('该手机号已经注册过了'));
        }
    },
    //用户注册
    userRegister({ commit }, user) {
        return reqUserRegister(user);
    },
    //用户登录
    async userLogin({ commit }, user) {
        //服务器下发token，用户唯一标识符
        //通过带token找服务器要用户信息
        let result = await reqUserLogin(user);
        // 密码正确
        if (result.code == 200) {
            //用户已经登录成功企且获取到token
            commit('USERLOGIN', result.data.token)
            //登录成功后把获取的token持久话存储,存到浏览器localStorage中
            localStorage.setItem('TOKEN', result.data.token)
            return '成功';
        } else {//密码错误
            return Promise.reject(new Error('faile'));
        }
    },

    //获取用户信息   
    async getUserInfo({ commit }) {
        let result = await reqUserInfo();
        if (result.code == 200) {
            // 获取用户信息成功
            commit('GETUSERINFO', result.data);
            return result;
        } else {
            return Promise.reject(new Error('faile'));
        }
    },
    //退出登录
    async userlogout({ commit }) {
        let result = await reqlogout();
        if (result.code == 200) {
            commit('CLEAR')
        }
    },


}

//准备getters——用于将state中的数据进行加工(类似计算属性，为了简化数据)
const getters = {

}
//暴露Store类的一个实例
export default ({
    actions,
    mutations,
    state,
    getters,
})
